#include "mainwindow.h"
#include "diskmanager.h"
#include <time.h>
#include <QApplication>
#include <QTextStream>
#include <string>
#include <iomanip>
#include <filesystem.h>
#include <bashapp.h>
#include <QFile>

int main(int argc, char *argv[])
{
    system("chcp 65001");
    std::cout << "已修改控制台为 UTF8 编码" << std::endl;

    // 这两行代码是让他每次都用一个新的文件名（时间戳）新建磁盘，Debug的时候用的
//    time_t t = time(NULL);
//    std::string name = std::to_string(t) + ".disk"; // 这里写磁盘文件的名字
    

    std::string name;
    Disk* disk;
    
    /*******************
     * 磁盘选择
     *******************/
    std::cout << "是否需要创建新的磁盘？\n[0] 使用现有磁盘 \n[1] 创建一块新的磁盘" << endl;
    bool need_new_disk;

    cin >> need_new_disk;
    
    FileSystem* file_system;
    if (need_new_disk) {
        cout << "请输入新创建的磁盘文件名称" << endl;
        cin >> name;
        disk = DiskManager::CreateNewDisk(8192, name);
        file_system = new FileSystem(disk);
        file_system->Format();
    }
    else {
        cout << "请输入磁盘文件名称" << endl;
        cin >> name;
        disk = new Disk(name, 8192);
        file_system = new FileSystem(disk);
    }
    file_system->InitFileMap();
    

    /*******************
     * 运行模式选择
     *******************/
    int app_mode;

    while(1) {
        std::cout << "请选择运行模式\n[1] GUI [2] Bash [3] 退出\n";
        std::cin >> app_mode;
        if (app_mode == 1) {
            std::cout << "正在启动...\n";
            QApplication a(argc, argv);
    
            MainWindow w(file_system);
            w.show();
            a.exec();
        }
        else if (app_mode == 2) {
            std::cout << "已进入控制台运行模式" << std::endl;
            BashApp bash(file_system);
        }
        else {
            break;
        }
       
        file_system->Flush();
        file_system->OpenDir("/");
        system("cls");
    }
    delete disk;
    delete file_system;
    return 0;
}
